package com.code.platform.common.open;


import com.code.platform.common.config.Global;
import com.code.platform.common.mapper.JsonMapper;
import com.code.platform.common.security.RSAUtils;
import com.code.platform.common.utils.StringUtils;

/**
 * 手机端接口返回值封装对象
 */
public class OpenResponseMobile {
    /**
     * 成功
     */
    public static final Integer SUCCESS = 1;
    /**
     * 失败
     */
    public static final Integer FAIL = 0;

    public static final boolean IS_ENCRYPT = true;

    /**
     * RSA响应加密公钥
     */
    protected static final String RES_PUBLIC_KEY = Global.getConfig("RSA.RES.PUBLICKEY");

    /**
     * 是否成功
     */
    private Integer is_success;

    /**
     * 错误信息
     */
    private String error;

    /**
     * 返回结果
     */
    private Object response;

    /**
     * 转成json对象
     * @return json字符串
     */
    public String toJson() {
        setEmpty();
        return JsonMapper.getInstance().toJson(this);
    }

    /**
     * 加密字符串
     *
     * @return 密文
     */
    public String toEncryptJson(boolean isAndroid) {
        try {
            String json = toJson();
            if (OpenResponseMobile.IS_ENCRYPT) {
                if (StringUtils.isNotBlank(json)) {
                    if (isAndroid) {
                        return "{\"result\":\"" + RSAUtils.encryptAndroid(json, RES_PUBLIC_KEY) + "\"}";
                    } else {
                        return "{\"result\":\"" + RSAUtils.encrypt(json, RES_PUBLIC_KEY) + "\"}";
                    }
                }
            } else {
                return json;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (OpenResponseMobile.IS_ENCRYPT) {
            return "{\"result\":null}";
        } else {
            return null;
        }
    }

    /**
     * 用于保持json xml输出空置时 内容一致
     */
    private void setEmpty() {
        if (response == null) response = "";    //生成 空response
        if (error == null) error = "";    //生成 空errorMessage
    }

    /**
     * 快捷设置为成功
     */
    public void setSuccess() {
        this.is_success = SUCCESS;
    }

    /**
     * 快捷设置为失败
     */
    public void setFail() {
        this.is_success = FAIL;
    }

    public Integer getIs_success() {
        return is_success;
    }

    public void setIs_success(Integer is_success) {
        this.is_success = is_success;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public Object getResponse() {
        return response;
    }

    public void setResponse(Object response) {
        this.response = response;
    }


}
